package com.boarsoft.boar.server;

import com.boarsoft.boar.entity.AppInfo;
import com.boarsoft.boar.entity.AppInst;
import com.boarsoft.boar.entity.ServerInfo;
import com.boarsoft.common.dao.PagedResult;

public interface ServerBiz {
	/**
	 * 查询服务器列表
	 * 
	 * @param projId
	 * @param env
	 * @param key
	 * @param orderBy
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<ServerInfo> list(String projId, String appId, String env, String key, String orderBy, int pageNo, int pageSize);

	/**
	 * 
	 * @param projId
	 * @param env
	 * @param key
	 * @param orderBy
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<ServerInfo> list(String projId, String env, String key, String orderBy, int pageNo, int pageSize);

	/**
	 * 保存服务器
	 * 
	 * @param a
	 */
	void save(ServerInfo a);

	/**
	 * 保存服务器
	 * 
	 * @param a
	 */
	void update(ServerInfo a);

	/**
	 * 删除某个服务器，需同步删除目录
	 * 
	 * @param id
	 * @return
	 */
	void delete(String id);

	/**
	 * 删除工程相关服务器
	 * 
	 * @param pid
	 * @return
	 */
	void deleteByProjId(String pid);

	/**
	 * 获取服务器信息
	 * 
	 * @param id
	 * @return
	 */
	ServerInfo get(String id);

	/**
	 * 将服务器状态改为“运行中”
	 * 
	 * @param id
	 * @return
	 */
	boolean start(String id);

	/**
	 * 将服务器状态改为“停止”
	 * 
	 * @param id
	 * @return
	 */
	boolean stop(String id);

	/**
	 * 查询节点（服务器）关联的（已部署的）应用列表 结果集中只有app，返回类型为PagedResult<AppInfo>
	 * 
	 * @param id
	 * @param key
	 * @param orderBy
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<AppInfo> listApps(String id, String key, String orderBy, int pageNo, int pageSize);

	/**
	 * 查询节点（服务器）关联的（已部署的）应用列表 结果集中只有app和appInst，返回类型为PagedResult<AppInst>
	 * 
	 * @param serverId
	 * @param key
	 * @param orderBy
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<AppInst> listAppsRich(String serverId, String key, String orderBy, int pageNo, int pageSize);

	/**
	 * 查询节点（服务器）未关联的（未部署的）应用列表
	 * 
	 * @param serverId
	 * @param key
	 * @param orderBy
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<AppInfo> listAppsWhereServerNotOnIt(String serverId, String key, String orderBy, int pageNo, int pageSize);

	/**
	 * 
	 * @param projId
	 * @param ip
	 * @return
	 */
	ServerInfo find(String projId, String ip);
}
